/*  
 * Copyright 2010-2017 Tocean Group.  
 * 版权：商业代码，未经许可，禁止任何形式拷贝、传播及使用
 * 文件名：Result.java
 * 描述：  
 * 修改人：Arber.Lee  
 * 修改时间：2018年5月9日  
 * 跟踪单号：  
 * 修改单号：  
 * 修改内容：  
 */
package online.chenlu.blog.core;

import com.alibaba.fastjson.JSON;

import java.util.Date;

/**
 * 统一API响应结果封装
 */
public class Result {

	private Integer code;

	private String message;

	private Object data;

	private Date time;

	/**
	 * 无参构造
	 */
	public Result() {
	}

	/**
	 * 状态码构造
	 */
	public Result(ResultCode code) {
		this.code = code.code();
		this.message = code.message();
	}

	/**
	 * 1、请求成功，无对象返回
	 * @return
	 */
	public static Result success() {
		return new Result(ResultCode.OK);
	}

	/**
	 * 2、请求成功，返回数据对象
	 * @param data
	 * @return
	 */
	public static Result success(Object data) {
		return success().setData(data);
	}

	/**
	 * 3、请求失败，返回错误状态码
	 * @param resultCode
	 * @return
	 */
	public static Result failure(ResultCode resultCode) {
		return new Result(resultCode);
	}

	/**
	 * 4、请求失败，返回服务器错误，并提示错误消息提示
	 * @param msg
	 * @return
	 */
	public static Result failure(String msg) {
		return failure(ResultCode.INTERNAL_SERVER_ERROR).setMessage(msg);
	}
	/**
	 * 5、请求失败，返回错误消息提示
	 * @param msg
	 * @return
	 */
	public static Result failure(ResultCode resultCode, String msg) {
		return failure(resultCode).setMessage(msg);
	}

	/**
	 * 6、请求失败，返回错误数据
	 * @param resultCode
	 * @param data
	 * @return
	 */
	public static Result failure(ResultCode resultCode, Object data) {
		return failure(resultCode).setData(data);
	}
	public Integer getCode() {
		return code;
	}

	public Result setCode(ResultCode resultCode) {
		this.code = resultCode.code();
		return this;
	}

	public String getMessage() {
		return message;
	}

	public Result setMessage(String message) {
		this.message = message;
		return this;
	}

	public Object getData() {
		return data;
	}

	public Result setData(Object data) {
		this.data = data;
		return this;
	}

	public Date getTime() {
		return new Date();
	}

	public void setTime(Date time) {
		this.time = time;
	}

	@Override
	public String toString() {
		return JSON.toJSONString(this);
	}
}
